//
//  QSNetworkTool.h
//  SinaWeiBo
//
//  Created by apple on 16/5/30.
//  Copyright © 2016年 apple. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 *  网络状态的枚举
 */
typedef enum {
    networkStatusWifi,
    networkStatusPhone,
    networkStatusNone
}NetworkStatus;

/**
 *  请求成功数据回调的代码块
 *
 *  @param result 字典对象
 */
typedef void (^HttpResponseSucBlock) (id result);

/**
 *  请求失败回调的代码块
 *
 *  @param task        task
 *  @param error       错误实例
 *  @param description 错误描述
 */
typedef void (^HttpResponseErrBlock) (NSURLSessionDataTask *task, NSError *error, NSString *description);

/**
 *  上传图片或文件的代码块
 *
 *  @param formData 文件格式
 */
typedef void (^HttpUploadDataBlock) (id<AFMultipartFormData> formData);

@interface QSNetworkTool : NSObject
/**
 *  网络对象管理者
 */
@property (nonatomic, strong) AFHTTPSessionManager *afManager;

/**
 *  网络的状态
 */
@property (nonatomic, assign) NSInteger networkStatus;
/**
 *  创建单例
 */
+ (instancetype)shareNetworkInstance;

/**
 *  post
 *
 *  @param url           网络请求的接口
 *  @param param         请求所带的参数
 *  @param completeBlock 成功请求后得到的响应,此响应包括服务器业务逻辑异常结果,只接收服务器业务逻辑状态码为200的结果
 *  @param errorBlock    服务器响应不正常,网络连接失败返回的响应结果
 */
- (void)requestWebWithParaWithURL:(NSString*)url Parameter:(NSDictionary *)param Finish:(HttpResponseSucBlock)completeBlock Error:(HttpResponseErrBlock)errorBlock;

/**
 *  get
 *
 *  @param url           网络请求的接口
 *  @param param         请求所带的参数
 *  @param completeBlock 成功请求后得到的响应
 *  @param errorBlock    网络连接失败返回的结果
 */
- (void)getWithURL:(NSString*)url Parameter:(NSDictionary *)param Finish:(HttpResponseSucBlock)completeBlock Error:(HttpResponseErrBlock)errorBlock;

/**
 *  post    上传图片和文件
 *
 *  @param url             网络请求的接口
 *  @param param           请求所带的参数
 *  @param uploadDataBlock 上传的数据
 *  @param completeBlock   成功请求后得到的响应
 *  @param errorBlock      网络连接失败返回的结果
 */
- (void)updloadDataWithUrl:(NSString *)url Parameter:(NSDictionary *)param updata:(HttpUploadDataBlock)uploadDataBlock Finish:(HttpResponseSucBlock)completeBlock Error:(HttpResponseErrBlock)errorBlock;
@end
